/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package schema;

import exception.CoordinateException;
import exception.SimboloException;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Antonio
 */
public class Schema {

    public final int GRIGLIA = 5;// Dim. griglia futoshiki 5 x 5
    private int[][] matrice;
    private List<Simbolo> simboli;

    public Schema() {

        matrice = new int[GRIGLIA][GRIGLIA];
        simboli = new LinkedList();

        initMatrice();
    }

    private void initMatrice() {

        for (int i = 0; i < matrice.length; i++) {

            for (int j = 0; j < matrice.length; j++) {

                matrice[i][j] = 0;
            }
        }
    }// initMatrice

    public int[][] getMatrice() {
        return matrice;
    }

    public List<Simbolo> getSimboli() {
        return simboli;
    }

    public boolean addValore(int i, Coordinate p) {

        if (p == null) {

            throw new CoordinateException("Attenzione, la posizione non puo' essere null per inserire nella matrice");
        }

        matrice[p.getRiga()][p.getColonna()] = i;
        return true;
    }// addValore

    public boolean addSimbolo(Simbolo s) {

        if (s == null) {

            throw new SimboloException("Attenzione, il simbolo non può essere null");
        }

        for (Simbolo si : simboli) {

            if (si.equals(s)) {

                return false;
            }
        }

        return simboli.add(s);
    }// addSimbolo 

    public int getVal(Coordinate c) {

        if (c == null) {

            throw new CoordinateException("Attenzione, coordiate necessarie per accedere alla matrice");
        }

        return matrice[c.getRiga()][c.getColonna()];
    }// getVal

    @Override
    public String toString() {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < matrice.length; i++) {

            sb.append("\n");
            for (int j = 0; j < matrice.length; j++) {

                sb.append(" ").append(matrice[i][j]).append(" ");
            }
        }

        return sb.toString();
    }
}
